In [ ]:
using Plots
using LinearAlgebra
using Random
using Statistics
using LaTeXStrings
In [ ]:
xf=100
N=20
xs=repeat(range(0,xf,N)',N);
ys=repeat(range(0,xf,N)',N)';
dx=diff(xs,dims=2)[1];
Encontrar vecinos¶
Haz una función para inicializar un grafo en donde los nodos son puntos en una red cuadrada, y todos los nodos están conectados con sus primeros vecinos. Los enlaces son bidireccionales. .
In [ ]:
MA=zeros(N^2,4);
for i in 1:N^2
k=0
for j in 1:N^2
if floor(sqrt((xs[i]-xs[j])^2+(ys[i]-ys[j])^2))==floor(dx)
k+=1
MA[i,k]=j
end
end
end
MA=sort(Int.(MA),dims=2);
plotg(xs,ys,MA)###Plot grid
In [ ]:
####Ezquinas
MA[1,3]=N^2-(N-1)
MA[1,4]=N
MA[N,3]=N^2
MA[N,4]=1
MA[N^2,3]=N
MA[N^2,4]=(N^2-(N-1))
MA[N^2-(N-1),3]=1
MA[N^2-(N-1),4]=(N^2)
############Extremos centrales
pp1=collect(N*2:N:N^2-N)
pp2=collect(N+1:N:N^2-N)
pp3=collect(2:N-1)
pp4=collect(N^2-(N-2):N^2-1)
MA[pp1,end]=pp2
MA[pp2,end]=pp1
MA[pp3,end]=pp4
MA[pp4,end]=pp3
MA=Int.(MA);
In [ ]:
f=20/40
MA1, NAR,scl=decimation(MA,N,f); ####MA es la matriz con la atualizacion de los vecinos NAR es el numero de enlaces resultantes
plotg(xs,ys,MA1)
find_cluster_sizes(MA1)
#plot!(xs[cls2],ys[cls2],color="black",lw=4,label="")
Out[ ]:
22-element Vector{Int64}:
2
3
8
229
4
3
20
2
2
4
2
6
32
3
7
2
4
3
7
7
5
6
$$f=3/5$$
In [ ]:
f=3/5
MA1, NAR,scl=decimation(MA,N,f);
plotg(xs,ys,MA1)
find_cluster_sizes(MA1)
#plot!(xs[cls2],ys[cls2],color="black",lw=4,label="")
#histogram(scl)
Out[ ]:
55-element Vector{Int64}:
4
6
6
26
6
8
2
7
5
2
5
5
2
⋮
2
13
2
2
12
3
8
2
2
5
2
2
Utiliza este algoritmo para encontrar la distribución de tamaños de cluster para una fracción de decimación $f$. Grafica los histogramas de los tamaños de cluster para varios valores de en un sólo par de ejes.
In [ ]:
nf=1000 ## Numero de Fs
NN=1000 ### numero de experimentos
f=range(0,0.99,nf)
data1=zeros(NN,nf)
med1=zeros(NN,nf)
max1=zeros(NN,nf)
sd1=zeros(NN,nf)
for j in 1:NN
data=[]
med=[]
sd=[]
max=[]
for i in f
MA1, NAR,scl=decimation(MA,N,i);
data=vcat(data,find_cluster_sizes(MA1))
med=vcat(med,mean(find_cluster_sizes(MA1)))
max=vcat(max,maximum(find_cluster_sizes(MA1)))
sd=vcat(sd,std(find_cluster_sizes(MA1)))
end
#data1[j,:]=data
med1[j,:]=med'
max1[j,:]=max'
sd1[j,:]=sd'
end
fs=repeat(f',NN);
In [ ]:
histogram(data,label="Tamaño de cluster")
Out[ ]:
Grafica, como función de la fracción $f$ , el tamaño medio de los clusters y la desviación estándard. También grafica el tamaño promedio del cluster más grande.
In [ ]:
α=0.004
plot(fs,max1,color="red",label="",alpha=α)
plot!(f,mean(max1,dims=1)',label="Promedio maximos"*L"\langle max \rangle",color="red")
Out[ ]: